/**
 * @description 防抖
 * @param func 函数
 * @param delay 时间
 * @param immediate 是否立即执行
 * @returns 函数
 */
 export function debounce(func: Function, delay: number = 500, immediate: boolean = false) {
    let timeout: any = undefined

    return function (this: any) {
        const args = arguments
        clearTimeout(timeout)
        // 判断是否立即执行，如果不传默认不立即执行
        if (immediate) {
            // 立即执行
            let callNow = !timeout
            timeout = setTimeout(() => {
                timeout = undefined
            }, delay)
            if (callNow) return func.apply(this, args)
        } else {
            // 延迟执行
            timeout = setTimeout(() => {
                func.apply(this, args)
            }, delay)
        }
    }
}